miniOS.h

#ifndef _KERNEL_H_

#define _KERNEL_H_

#include

#include

#include

#include

#include

#include

#endif miniOS.c

#include

extern Mini_memory_mange memory_mange;

extern Mini_task_mange task_manage;

int miniOS_current_index;

Mini_free_task TCB;

Mini_free_task *TCB_PtrCurrentTask;

Mini_free_task *TCB_PtrNextTask;

void scheduler(void)

{

TCB_current_index++;

TCB_current_index %= (task_manage.max_task_id + 1);

TCB_PtrNextTask =

&task_manage.free_task_pool[TCB_current_index];

TCB_PtrCurrentTask = TCB_PtrNextTask;

}

void swiHandler(void)

{

printf("System Call %d\n", syscallnum);

}

void irqHandler(void)

{

if(ICIP & (1 << 27)) != 0)

{

OSSR = OSSR_M1;

OSMR1 = OSCR + 3686400;

scheduler();

}

}

void OS_timer_init(void)

{

ICCR = 0x01;

ICMR |= (1<< 27);

ICLR &=~(1 <<27);

OSCR = 0;

OSMR1 = OSCR+3686400;

OSSR = OSSR_M1;

}

void OS_timer_start(void)

{

OIER |= (1<<1);

OSSR = OSSR_M1;

}

void irq_enable(void)

{

_asm_("msr cpsr_c, #0x40 | 0x13");

}

void irq_disable(void)

{

_asm_("msr cpsr_c, #0xc0 | 0x13");

}

int scheduler_init(void)

{

if(task_manage.max_task_id < 0)

{

return -1;

}

TCB_PtrCurrentTask = &TCB;

TCB_PtrNextTask = &task_manage.free_task_pool[0];

TCB_current_index = -1;

return 0;

}

int scheduler_init(void)

{

if(task_manage.max_task_id < 0)

{

return -1;

}

TCB_PtrCurrentTask = &TCB;

TCB_PtrNextTask = &task_manage.free_task_pool[0];

TCB_current_index = -1;

return 0;

}

int main()

{

int i;

miniOS_init();

miniOS_user();

if(scheduler_init < 0)

{

printf("miniOS Kernel Error!!!\n");

return -1;

}

for(i=0; i<= task_manage.max_task_id; i++)

{

printf(TCB : TASK%d - init PC(%p) \t init SP(%p) \n"i+1, task_manage.free_task_poo[i].context_pctask_manage.free_task_poo[i].context_sp);

}

printf("Function TASK1 : %p\n", usertask1);

printf("Function TASK2 : %p\n", usertask2);

printf("Function TASK3 : %p\n", usertask3);

irq_enable();

while(1)

{

msleep(1000);

}

return 0;

}